package interceptors

import (
	"context"
	"log"

	"google.golang.org/grpc"
)

/**
 * 认证单元拦截器
 *
 * @return grpc.UnaryServerInterceptor
 * @author huwl
 * @date 2025/09/23 20:52:14
 */
func AuthInterceptor() grpc.UnaryServerInterceptor {
	return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
		// 1. 预处理逻辑：在调用业务处理方法之前执行
		// 例如：验证身份、记录请求日志、记录开始时间等
		log.Printf("开始处理单元调用: %s", info.FullMethod)

		// 2. 调用业务处理方法
		resp, err := handler(ctx, req)

		// 3. 后处理逻辑：在业务方法处理完成后执行
		// 例如：记录响应日志、统计处理耗时、转换错误等
		if err != nil {
			log.Printf("处理失败: %v", err)
		} else {
			log.Printf("处理成功")
		}

		return resp, err
	}
}
